package cn.fansunion.leecode.math;

/**
 * 326. 3 的幂 给定一个整数，写一个函数来判断它是否是 3 的幂次方。如果是，返回 true ；否则，返回 false 。
 * 
 * 整数 n 是 3 的幂次方需满足：存在整数 x 使得 n == (3的x次方)
 * 
 * 来源：力扣（LeetCode） 链接：https://leetcode-cn.com/problems/power-of-three 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * 
 * @author wen.lei@brgroup.com
 *
 *         2022-2-19
 */
public class PowerOfThree {

    /*示例 1：
    
    输入：n = 27
    输出：true
    示例 2：
    
    输入：n = 0
    输出：false
    示例 3：
    
    输入：n = 9
    输出：true
    示例 4：
    
    输入：n = 45
    输出：false
     
    n=-45否,n=-9否,n=1是
    提示：
    
    -2的31次方 <= n <= 2的31次方 - 1
     
    
    进阶：你能不使用循环或者递归来完成本题吗？*/
    public boolean isPowerOfThree(int n) {
        //3的x次方，如果为负数，肯定是个小数，而非整数
        if(n<=0) {
            return false;
        }
        if(n==1) {
            return true;
        }
        //>=3，不断-
        while (n >= 3) {
            if(n%3==0) {
                n=n/3;
            }else {
               return false;
            }
        }
        //1
        return n==1;
    }
    
    /**
     * 非循环递归解法
     * @param n
     * @return
     */
    public boolean isPowerOfThreeNoWhile(int n) {
        return false;
        
    }
}
